package com.boot.ys.mybatisplus.script;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.util.HashMap;
import java.util.Map;

/**
 * 描述 我一个文件夹下有很多的子文件夹，子文件文件夹下有很多的图片，我先有一个这样子的需求，我给你这个文件夹路径，
 * 你帮我看前文件夹的前9位数如果存在两个文件夹的话，就移动启动有一个文件夹到另外的根目录下
 *
 * @Author yangsheng
 * @Date 2024/9/8 20:33
 */
public class moreFoilder {


    private static final String OLD_SUBSTRING = "amage";
    private static final String NEW_SUBSTRING = "image";
    private static final String PARENT_FOLDER_PATH = "E:\\BaiduNetdiskDownload\\微信小程序项目2.0截图";

    public static void main(String[] args) {
        File parentFolder = new File(PARENT_FOLDER_PATH);

        if (parentFolder.exists() && parentFolder.isDirectory()) {
            renameFiles(parentFolder);
            System.out.println("所有符合条件的图片文件名已更新。");
        } else {
            System.out.println("指定的路径不存在或不是一个目录。");
        }
    }


    private static void renameFiles(File folder) {
        File[] files = folder.listFiles();
        if (files != null) {
            for (File file : files) {
                if (file.isDirectory()) {
                    // 递归处理子目录
                    renameFiles(file);
                } else {
                    // 处理文件名包含 "amage" 的文件
                    String fileName = file.getName();
                    if (fileName.contains(OLD_SUBSTRING)) {
                        String newFileName = fileName.replace(OLD_SUBSTRING, NEW_SUBSTRING);
                        File newFile = new File(file.getParent(), newFileName);
                        if (file.renameTo(newFile)) {
                            System.out.println("重命名文件: " + file.getAbsolutePath() + " -> " + newFile.getAbsolutePath());
                        } else {
                            System.out.println("重命名失败: " + file.getAbsolutePath());
                        }
                    }
                }
            }
        }
    }

    // public static void main(String[] args) {
    //     // 替换为你需要检查的父文件夹路径
    //     String parentFolderPath = "E:\\BaiduNetdiskDownload\\微信小程序项目2.0截图";
    //     // 替换为目标根目录路径
    //     String targetRootPath = "E:\\BaiduNetdiskDownload\\微信小程序2.0合并";
    //
    //     File parentFolder = new File(parentFolderPath);
    //     File targetRoot = new File(targetRootPath);
    //
    //     // 确保父文件夹和目标根目录存在且是目录
    //     if (parentFolder.exists() && parentFolder.isDirectory() &&
    //             targetRoot.exists() && targetRoot.isDirectory()) {
    //
    //         moveFoldersBasedOnPrefix(parentFolder, targetRoot);
    //     } else {
    //         System.out.println("指定路径不是一个有效的目录");
    //     }
    // }

    public static void moveFoldersBasedOnPrefix(File parentFolder, File targetRoot) {
        // 使用 HashMap 存储前 9 位数和对应的文件夹列表
        Map<String, File[]> prefixToFoldersMap = new HashMap<>();

        // 获取父文件夹下的所有子文件夹
        File[] files = parentFolder.listFiles();
        if (files != null) {
            for (File file : files) {
                // 确保这是一个目录
                if (file.isDirectory()) {
                    String folderName = file.getName();
                    if (folderName.length() >= 9) {
                        String prefix = folderName.substring(0, 9);
                        prefixToFoldersMap.computeIfAbsent(prefix, k -> new File[0]);
                        File[] folders = prefixToFoldersMap.get(prefix);
                        File[] newFolders = new File[folders.length + 1];
                        System.arraycopy(folders, 0, newFolders, 0, folders.length);
                        newFolders[folders.length] = file;
                        prefixToFoldersMap.put(prefix, newFolders);
                    }
                }
            }
        }

        // 遍历所有的前缀，检查是否存在多个文件夹
        for (Map.Entry<String, File[]> entry : prefixToFoldersMap.entrySet()) {
            File[] folders = entry.getValue();
            if (folders.length > 1) {
                // 有多个文件夹，移动第一个文件夹到目标根目录
                File folderToMove = folders[0];
                File targetPath = new File(targetRoot, folderToMove.getName());

                try {
                    Files.move(folderToMove.toPath(), targetPath.toPath(), StandardCopyOption.REPLACE_EXISTING);
                    System.out.println("移动文件夹: " + folderToMove.getName() + " 到 " + targetPath.getAbsolutePath());
                } catch (IOException e) {
                    System.out.println("移动文件夹失败: " + e.getMessage());
                }
            }
        }
    }

}

